iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
1

Hilt

Hilt是Android的DI library,基於Dagger基礎上的。

DI(Dependency Injection): 目的是讓開發者能夠寫出低耦合的程式碼。類別裡的屬性就是這個類的依賴,通過創建的方式對屬性進行賦值就是依賴注入。


@HiltAndroidApp:使用Hilt必須聲明有@HiltAndroidApp註解的Application。
@AndroidEntryPoint:使用在Activity、Fragment、View、Service、BroadcastReceiver。
1.Activity:只支持ComponentActivity的子類例如FragmentActivity、AppCompatActivity。
2.Fragment:只支持androidx.Fragment。
@Inject:提供該類的創建。
@Singleton:聲明為單例。

Gradle(Project)

dependencies {
     classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
}

Gradle(Module)

apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'

implementation "com.google.dagger:hilt-android:$hiltVersion"
kapt "com.google.dagger:hilt-android-compiler:$hiltVersion"

自定義Application

@HiltAndroidApp
class MyApplication : Application() {
    //初始化
}

聲明Application

<application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

要被注入的類

class Hello @Inject constructor(){

    fun talk() {
        Log.d("GGG", "Hello")
    }
}

使用Inject

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var hello: Hello

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        info.setOnClickListener {
            info.text = hello.talk()
        }

        info.setOnLongClickListener {
            info.text = hello.talk("Hello")
            true
        }
    }
}


上一篇
{Day19}Navigation-動畫、返回、傳值
下一篇
{Day21}Jetpack Compose 介紹&布局
系列文
Kotlin Android Jetpack 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言